'use strict';
const crypto = require('crypto');

// 生成加密token
const generateToken = (id) => {
  const timestamp = Date.now();
  const randomStr = crypto.randomBytes(16).toString('hex');
  const data = `${id}:${timestamp}:${randomStr}`;
  const token = crypto.createHmac('sha256', process.env.TOKEN_SECRET || 'your-secret-key')
    .update(data)
    .digest('hex');
  return `${token}.${timestamp}.${randomStr}`;
};

// 验证token
const verifyToken = (token) => {
  try {
    const [signature, timestamp, randomStr] = token.split('.');
    const data = `${id}:${timestamp}:${randomStr}`;
    const expectedSignature = crypto.createHmac('sha256', process.env.TOKEN_SECRET || 'your-secret-key')
      .update(data)
      .digest('hex');
    return signature === expectedSignature;
  } catch (error) {
    return false;
  }
};

exports.main = async (event, context) => {
  console.log('登录请求参数:', event);
  
  const { loginId } = event;
  
  if (!loginId) {
    return {
      success: false,
      message: '登录ID不能为空'
    };
  }

  try {
    const db = uniCloud.database();
    const loginCollection = db.collection('login');
    
    console.log('开始查询登录ID:', loginId);
    
    // 获取数据
    const { data } = await loginCollection.get();
    console.log('数据库中的数据:', data);

    if (!data || data.length === 0) {
      return {
        success: false,
        message: '数据库中没有数据'
      };
    }

    // 获取第一条记录（因为数据是以对象形式存储的）
    const loginData = data[0];
    
    // 检查登录ID是否存在于对象的键中
    const isValidId = Object.keys(loginData).some(key => key === loginId);
    console.log('ID验证结果:', isValidId);

    if (isValidId) {
      console.log('找到有效的登录ID');
      
      // 生成token
      const token = generateToken(loginId);
      
      try {
        // 更新最后登录时间（使用当前时间戳）
        const updateResult = await loginCollection.doc(loginData._id).update({
          [loginId]: new Date().toISOString() // 使用登录ID作为键，存储最后登录时间
        });
        console.log('更新登录时间结果:', updateResult);

        return {
          success: true,
          token,
          message: '登录成功',
          userData: {
            id: loginId,
            lastLoginTime: new Date().toISOString()
          }
        };
      } catch (updateError) {
        console.error('更新登录时间失败:', updateError);
        // 即使更新失败也返回登录成功
        return {
          success: true,
          token,
          message: '登录成功（更新登录时间失败）',
          userData: {
            id: loginId
          }
        };
      }
    } else {
      console.log('未找到有效的登录ID');
      return {
        success: false,
        message: '登录ID无效',
        debug: {
          searchedId: loginId,
          availableIds: Object.keys(loginData).filter(key => key !== '_id')
        }
      };
    }
  } catch (error) {
    console.error('登录验证失败:', error);
    return {
      success: false,
      message: '登录验证失败，请稍后重试',
      error: error.message,
      stack: error.stack
    };
  }
}; 